//
//  WBBaseViewController.swift
//  个人微博
//
//  Created by 任聪聪 on 2017/5/16.
//  Copyright © 2017年 任孜聪. All rights reserved.
//
//测试分支功能
import UIKit

class WBBaseViewController: UIViewController {
    //自定义导航栏r
     lazy var navBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: UIScreen.cz_screenWidth(), height: 64))
    //自定义导航项
     lazy var navBarItem = UINavigationItem()
    //定义是否上拉
    var isPullUp = false
    //定义tableview
    var tv:UITableView?
    //定义下拉刷新
    var refresh:UIRefreshControl?
    //定义一个是否为登陆界面的变量
    var isLogon = true
    //定义接受子控制信息字典
    var informList = [String:String]()
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.cz_random()
        navigationController?.navigationBar.isHidden = true
        //取消自动缩进
        automaticallyAdjustsScrollViewInsets = false
        setUpNavBar()
        WBNetWorkManager.shared.userLogin ? setUpUI() : setVisitorUI()
        WBNetWorkManager.shared.userLogin ? loadData():()
    }
    //调用子类实现的数据方法
    func loadData() {
        //如果子类没有做任何实现操作，就将刷新控制器结束掉。
        refresh?.endRefreshing()
    }
    //重写基类title方法设置title
    override var title: String?{
        didSet{
            navBarItem.title = title
        }
    }
}
extension WBBaseViewController{
    func setUpUI(){
        tv = UITableView(frame: view.bounds, style: .plain)
        tv?.dataSource = self
        tv?.delegate = self
        //表格内容缩进
        tv?.contentInset = UIEdgeInsets(top: navBar.bounds.height, left: 0, bottom: tabBarController?.tabBar.bounds.height ?? 49, right: 0)
        //设置滚动条缩进，强行解包content一定要有值
        tv?.scrollIndicatorInsets = tv!.contentInset
        //上拉事件触发refresh效果
        refresh = UIRefreshControl()
        refresh?.addTarget(self, action: #selector(loadData), for: .valueChanged)
        tv?.addSubview(refresh!)
        view.insertSubview(tv!, belowSubview: navBar)
    }
    //访客视图初始化
    func setVisitorUI(){
        let visitorUI = WBVisitorView(frame: view.bounds)
        visitorUI.visitorInfo = informList
        view.insertSubview(visitorUI, belowSubview: navBar)
        visitorUI.registButton.addTarget(self, action: #selector(regist), for: .touchUpInside)
        visitorUI.loginButton.addTarget(self, action: #selector(login), for: .touchUpInside)
        navBarItem.leftBarButtonItem = UIBarButtonItem(title: "注册", style: .plain, target: self, action: #selector(regist))
        navBarItem.rightBarButtonItem = UIBarButtonItem(title: "登录", style: .plain, target: self, action: #selector(login))
    }
    //设置navigationBar的属性
    func setUpNavBar(){
        //添加自定义UINavigationBar
        view.addSubview(navBar)
        //将item设置给bar
        navBar.items = [navBarItem]
        //渲染导航条的背景色
        navBar.barTintColor = UIColor.cz_color(withHex: 0xF6F6F6)
        //设置导航条的标题字体颜色
        navBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.darkGray]
        //设置左右按键文字颜色
        navBar.tintColor = UIColor.orange
    }
}
//通过定义WBBaseViewController的类型来扩展它的属性
//OC不支持多继承，通过协议的方式实现协议中的方法来获取协议中的属性
//实现协议protocol中的方法来获取UITableViewDelegate,UITableViewDataSource的属性
//基类WBBaseViewController只负责创建方法，子类负责方法的实现
extension WBBaseViewController:UITableViewDelegate,UITableViewDataSource{
    //1.extension中不能定义属性
    //2.extension用于分割代码块
    //3.extension中不能重写父类方法，子类负责重写父类方法，extension是对类的扩展
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    //将要展示的cell
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        //取最后一个section里面最后一row
        let row = indexPath.row
        let section = tableView.numberOfSections - 1
        //登陆界面row和section为负数判断为不处理
        if row<0 || section<0 {
            return
        }
        let rowCount = tableView.numberOfRows(inSection: section)
        //如果是最后一行做上拉刷新
        if row == (rowCount - 1) && !isPullUp {
            print("进行上拉操作")
            isPullUp = true
            loadData()
        }
    }
}
extension WBBaseViewController{
    func login(){
        print("登录成功")
        //发送通知
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: WBUserShouldLoginNotification), object: nil)
    }
    func regist(){
        print("注册成功")
    }
}
